package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"log"
	"net/http"
	"net/url"
	"strings"
	"time"

	"github.com/gorilla/websocket"
)

// 定义请求结构
type RequestData struct {
	Index  string `json:"index"`
	TxtMP3 string `json:"txt-mp3"`
}

// 定义WebSocket消息结构
type WebSocketMessage struct {
	Index  string `json:"index"`
	Status string `json:"status"`
}

func sendRequest(index int) {
	// 创建请求数据
	data := RequestData{
		Index:  fmt.Sprintf("%d", index),
		TxtMP3: "欢迎使用索易软件，索易，so easy，就是这么容易",
	}

	// 将数据编码为JSON
	jsonData, err := json.Marshal(data)
	if err != nil {
		log.Fatalf("JSON编码出错: %v", err)
	}

	// 向服务器发送POST请求
	resp, err := http.Post("http://localhost:7001/generate", "application/json", bytes.NewBuffer(jsonData))
	if err != nil {
		log.Fatalf("请求出错: %v", err)
	}
	defer resp.Body.Close()

	// 读取服务器响应
	if resp.StatusCode == http.StatusOK {
		log.Printf("任务 %d 已成功发送，服务器响应: %s", index, resp.Status)
	} else {
		log.Printf("任务 %d 发送失败，状态码: %d", index, resp.StatusCode)
	}
}

func main() {
	// 启动WebSocket连接
	u := url.URL{Scheme: "ws", Host: "localhost:7002"}
	log.Printf("连接到 %s", u.String())

	// 建立WebSocket连接
	c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
	if err != nil {
		log.Fatal("WebSocket连接出错:", err)
	}
	defer c.Close()

	// 启动一个goroutine接收服务器WebSocket消息
	go func() {
		for {
			_, message, err := c.ReadMessage()
			if err != nil {
				log.Println("读取消息出错:", err)
				return
			}

			// 将消息转为字符串
			msg := string(message)

			// 匹配服务器返回的状态
			if strings.Contains(msg, "failed") {
				log.Printf("收到消息: %s", msg)
			} else if strings.Contains(msg, "done") {
				log.Printf("收到消息: %s", msg)
			} else {
				log.Printf("收到未识别的消息: %s", msg)
			}
		}
	}()

	// 发送两个请求
	sendRequest(4)
	time.Sleep(2 * time.Second)
	sendRequest(5)

	// 保持WebSocket连接，等待服务器消息
	select {}
}
